package com.dkd.day20250619;

public class SolutionFindNumsAppearOnce {
    public static void main(String[] args) {

    }

    public int[] FindNumsAppearOnce (int[] nums) {
        // write code here
        // write code here
        int xor = 0;
        for (int num : nums) {
            xor ^= num;
        }

        // 第二步：找到 xor 中任意一个为 1 的位（这里找最低位的 1）
        int mask = 1;
        while ((xor & mask) == 0) {
            mask <<= 1; // 左移直到找到第一个 1
        }

        // 第三步：按 mask 分组异或
        int a = 0, b = 0;
        for (int num : nums) {
            if ((num & mask) == 0) {
                a ^= num; // 分组 1
            } else {
                b ^= num; // 分组 2
            }
        }
        if (a > b) {
            int c = a;
            a = b;
            b = c;
        }

        return new int[]{a, b};
    }
}
